#include #include int optime(void op_main(void), void op_init(int count), void op_tini(void), int count); void op_main(void); void op_init(int count); void op_tini(void); extern char op_name[]; int ssp; void main(int argc, char *argv[]) { double mpu_clock = 10.0; int count = 1000; int result; double each_microsec; double each_clock; if (B_BPEEK((void *)0x00e8e00b) == 0xdc) { /* X68030 */ if (B_BPEEK((void *)0x0cbc) == 0x06) { /* 060turbo */ mpu_clock = 50.0; } else { /* X68030/040turbo */ mpu_clock = 25.0; } } else if (B_BPEEK((void *)0x00e8e00b) == 0xfe) { /* X68000 16MHz */ mpu_clock = 16.667; } else { /* X68000 10MHz */ mpu_clock = 10.0; } switch (argc) { case 3: sscanf(argv[2], "%lf", &mpu_clock); case 2: sscanf(argv[1], "%d", &count); break; default: fprintf(stderr, "使用法: %s ループ回数 [MPU_CLOCK(MHz)]\n", op_name); return; } ssp = B_SUPER(0); result = optime(op_main, op_init, op_tini, count); B_SUPER(ssp); if (result == -1) { fprintf(stderr, "%s: Timer-Dが使用中です\n", op_name); return; } each_microsec = result / (double)count; each_clock = each_microsec * mpu_clock; printf("[%s] total=%d(μs) count=%d each=%.4g(μs) each=%.4g(clock/%.4gMHz)\n", op_name, result, count, each_microsec, each_clock, mpu_clock); }